
// import router from '@/router'
import router from '@/router'
import store from '@/store'
// import { config } from '@vue/test-utils'
import axios from 'axios'
import { Message } from 'element-ui'

// 创建了一个新的axios实例
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000 // 超时时间
})

// 请求拦截器
// service.interceptors.request.use((config) => {
//   // 添加新员工时不能携带token【判断是否是添加员工】
//   if (config.url === '/auth/local/register' && config.method === 'post') {
//     return config
//   }
//   config.headers['Authorization'] = 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6NTksImlhdCI6MTY1NjAzODg5NywiZXhwIjoxNjU4NjMwODk3fQ.88_fwbU8ZrvRxyEmdTKlXZASW4-_5uUe0MJRh_9aOCE' // 有token，统一注入token Bearer后有个空格

//   return config // 无论如何都要返回配置
// }, error => {
//   return Promise.reject(error)
// })

// 请求拦截器
service.interceptors.request.use((config) => {
  if (config.url === '/auth/local/register' && config.method === 'post') {
    return config
  } else {
    if (store.getters.token) {
      config.headers.Authorization = 'Bearer ' + store.getters.token
    }
    return config // 放行请求
  }
})

// 响应拦截器
service.interceptors.response.use(
  response => {
    // console.log(29, response)
    if (response.status === 200) {
      // console.log('网络层面成功')
      return response.data
    }
  },
  error => {
    // 错误都会被error捕获到
    console.dir(error)
    if (error.response && error.response.data && error.response.data.statusCode === 401) {
      // if (store.state.token) {}
      // 当error 捕获到401  表示token超时了
      // 此时 退出 清除token
      store.dispatch('user/logout') // 调用vuex中的全局仓库的 退出方法
      // 跳转到登录页面
      router.push('/login')
    } else {
      Message.error(error.message)
      return Promise.reject(error) // 返回执行错误 让当前的执行链中断 直接进入.catch
    }
  }

)

// 响应拦截器
// 请求一般有两种错误
// 一种是网络层面的错误，比如接口地址写错了
// 一种是数据层面的错误，比如登录接口的账号密码错了
// 做响应拦截错误处理的目的是什么？
// 答：1、简化数据格式（调用接口，最终接收到的数据格式--减少层级）
//     2、统一的错误处理，这样
export default service
